iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
佛心分享-刷題不只是刷題

圖解LeetCode(入門篇)系列 第 12

圖解LeetCode(入門篇): 66. Plus One

  • 分享至 

  • xImage
  •  

66. Plus One

題目描述:

給定一個由整陣列成的非空陣列,表示一個非負整數,在該數的基礎上加一,並返回結果陣列。

最高位數字存放在陣列的首位,陣列中每個元素只存儲單個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

Example 1:

  • Input: digits = [1,2,3]
  • Output: [1,2,4]
  • Explanation: 該陣列表示整數 123。加一後得到 123 + 1 = 124,因此結果應為 [1,2,4]

解題思路:
這道 LeetCode 題目是實作題,只要按照題目要求進行操作即可。唯一需要注意的是,由於最高位數字存放在陣列組的開頭,所以我們必須從陣列的末尾開始處理加法。

當我們從陣列的最後一位開始加 1 時,如果結果是 10,表示需要進位。這時候,我們將當前位設為 0,並繼續處理前一位。如果遍歷完所有位數後還需要進位,就在陣列的最前面加一個 1。這樣就能確保陣列正確地表示加 1 後的結果。這個過程的關鍵在於理解進位的處理方式,以及如何從陣列末尾開始遍歷來解決問題。

在 JavaScript 中,如果要對陣列的尾端增減元素,會使用 pushpop 方法;如果要對陣列的頭端增減元素,則會使用 unshiftshift 方法。在這道題中,當遍歷完所有位數後仍需要進位時,我們可以使用 unshift 方法在陣列的最前面新增一個 1。這樣可以輕鬆地解決進位問題。
https://ithelp.ithome.com.tw/upload/images/20240821/20168306SJehRAFNeg.jpg

var plusOne = function(digits) {
    for (let i = digits.length - 1; i >= 0; i--) {
        digits[i]++;
        if (digits[i] === 10) {
            digits[i] = 0;
        } else {
            return digits;
        }
    }
    
    digits.unshift(1);

    return digits;
};

時間複雜度:O(n),其中 n 是陣列的長度。我們最多遍歷陣列中的每一位一次。
空間複雜度:O(1),除了輸入和輸出,我們只使用了常數級別的額外空間。

總結:
LeetCode 的 Easy 題目中有不少是實作題,不需要複雜的演算法介入,只需按照要求實作即可解題。由於數字的排列方式與 Array 的排列方式剛好相反,因此在遍歷時需要從尾部開始,這點對於入門者來說尤其需要注意。這道題目可以歸類為「for 迴圈」,是一道相對平易近人的題目。


上一篇
圖解LeetCode(入門篇): 58. Length of Last Word
下一篇
圖解LeetCode(入門篇): 67. Add Binary
系列文
圖解LeetCode(入門篇)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言